package com.behelpful.demo.quartz.job;

import com.behelpful.demo.quartz.entity.SystemJob;
import com.behelpful.demo.quartz.invoker.ITaskInvoker;
import lombok.Data;
import org.quartz.*;
import org.springframework.scheduling.quartz.QuartzJobBean;

/**
 * 任务执行的类
 * DisallowConcurrentExecution 禁止并发执行多个相同定义的JobDetail,保证上一个任务执行完后，再去执行下一个任务，这里的任务是同一个任务
 * PersistJobDataAfterExecution 将 JobDataMap 进行持久化
 *
 * @author Alay
 * @date 2021-10-31 16:57
 * @see {cron表达式 https://www.cnblogs.com/Alay/p/15488175.html}
 * @see {参考https://gitee.com/52itstyle/spring-boot-quartz}
 * @since
 */
@Data
@PersistJobDataAfterExecution
@DisallowConcurrentExecution
public class IQuartzJob implements Job {
    /**
     * 携带任务信息的数据对象
     */
    private SystemJob scheduleJob;

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        ITaskInvoker.invoke(scheduleJob, context.getTrigger());
        // 此处可记录日志相关的一些列操作,测试项目我就省略了
    }

}
